// 路由鉴权
import router from './router/index.ts';
import { useUserStore } from './store/modules/user.ts';
// 路由跳转加载进度条
import nprogress from 'nprogress';
import 'nprogress/nprogress.css';
import { Notify } from 'quasar';
// 取消环形加载图案
nprogress.configure({ showSpinner: false });

// 为所有路由添加前置守卫
router.beforeEach(async to => {
  nprogress.start();
  const userStore = useUserStore();
  const token = userStore.token;
  if (token) {
    // 有token
    // 没有用户信
    if (!userStore.userInfo) {
      try {
        await userStore.getUserInfo();
        if (!router.hasRoute(to.name!)) router.replace(to);
      } catch (error: any) {
        // 获取用户信息失败，可能是token过期
        userStore.resetAll();
        Notify.create({
          type: 'negative',
          message: error.message,
          position: 'top'
        });
        return {
          path: '/login',
          query: { redirect: to.fullPath }
        };
      }
    }
    // 关于获取用户信息，token是否有效，逻辑判断在layout组件内路由守卫中
    if (to.path === '/login') return { path: '/' };
    else return true;
  } else {
    // 没有token
    if (to.path === '/login') return true;
    else return { path: '/login', query: { redirect: to.fullPath } };
  }
});

router.afterEach(to => {
  nprogress.done();
  const subtitle = to.meta.title ? '-' + to.meta.title : '';
  document.title = `${import.meta.env.VITE_APP_TITLE}${subtitle}`;
});
